GitHub Actions の実行ランタイムで Node.js v20 を使うようにする
こんにちは、CX 事業本部 Delivery 部の若槻です。
最近、AWS Lambda のランタイムで Node.js 20 がサポートされる熱いアップデートがありましたね。これを受けて、早速新規作成する Lambda を Node.js 20 で実装したり、既存の Lambda をアップデートする際の影響調査をされていたりする方も多いのではないでしょうか。
そして合わせてアップデートしておきたいのが CI/CD パイプラインの Node.js バージョンです。特に CI では依存関係のインストールや、TypeScript のトランスパイル、モジュールバンドリングなどの様々なビルド処理が行われるため、互換性のリスクを避けるためにもビルド環境である CI のランタイムと、実行環境である Lambda のランタイムは出来れば一致させておきたいところです。
そこで今回は、代表的な CI/CD ツールである GitHub Actions で Node.js v20 ランタイムを使うようにする方法を確認してみました。
GitHub Actions では既定では Node 18 が使われる
GitHub Actions の実行ランタイムで既定使われる Node.js バージョンを確認してみます。
次のような Node.js バージョンを出力するだけの GitHub Actions ワークフローを作成します。
on: workflow_dispatch jobs: test: runs-on: ubuntu-latest steps: - run: node --version
ワークフローを実行すると、次のように既定では Node.js v18 が使われていることが分かります。
Run node --version node --version shell: /usr/bin/bash -e {0} v18.18.2
GitHub Actions で Node 20 を使うようにする
GitHub Actions の実行ランタイムで使われる Node.js バージョンを変更するには、setup-node アクションを使います。
これは公式のドキュメントでも紹介されている方法となります。
ワークフローでは次のように actions/setup-node
で node-version
引数に 20
を指定します。
on: workflow_dispatch jobs: test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" cache: npm - run: node --version
ワークフローを実行すると、次のように Node.js v20 が使われるようになったことが分かります。
Run node --version node --version shell: /usr/bin/bash -e {0} v20.9.0
ロックファイルが必要
setup-node
アクションの実行では Node.js ランタイムで利用可能な依存関係のロックファイルが必要となります。ロックファイルがない場合は、次のようなエラーが発生します。
Error: Dependencies lock file is not found in /home/runner/work/cdk_sample_app/cdk_sample_app. Supported file patterns: package-lock.json,npm-shrinkwrap.json,yarn.lock
そのため先に checkout
アクションなどで package-lock.json
などを取得しておく必要があります。
バージョンの指定は semver で指定可能
setup-node
アクションでの node-version
引数には Node.js のバージョンを semver で指定することができます。
よって、20.9.0
のようにパッチおよびマイナーバージョンまで指定したり、latest
のようにメジャー含めた最新バージョンを常に指定させることも可能です。
来年春までに、Node 16 から 20 への移行が行われる
Node.js 16 のサポート終了を受けて、GitHub Actions では 2024 年春までに Node.js 16 から Node.js 20 への移行が計画されています。
2024 年春"まで"なので、明日にでも強制的な移行が行われる可能性はゼロではないため、現在 Node.js 16 が使われている環境では早急な対応が必要となります。現在 Node.js 16 が使われているワークフローの実行では警告が出力されるようになっているため、ユーザーがワークフロー内で明示的に指定している場合はもとより、依存しているアクションの中で使われていないか念のため確認しておくと良いでしょう。
おわりに
GitHub Actions の実行ランタイムで Node.js v20 を使うようにする方法を確認してみました。
AWS Lambda のランタイムを Node.js v20 にアップデートするのを機に、GitHub Actions の実行ランタイムも Node.js v20 にアップデートしておくと良いでしょう。
以上